這 30 天裡,我們學了文字、圖片、語音、Embeddings 等各種功能。
那如果把這些功能整合起來,能做什麼?
答案是:
讓 AI 幫你「讀文件、抓重點、回答問題」。今天,我們就要做一個小型「智慧文件助理」
這個小工具能讀取使用者上傳的 PDF/TXT檔
使用 Embeddings 轉成向量,用 Chat Completions 分析與回答問題
from openai import OpenAI
import os, json
from sklearn.metrics.pairwise import cosine_similarity
import numpy as np
client = OpenAI(api_key="YOUR OPENAI API KEY")
def get_embeddings(texts):
vectors = []
for t in texts:
emb = client.embeddings.create(
model="text-embedding-3-small",
input=t
)
vectors.append(emb.data[0].embedding)
return np.array(vectors)
def find_best_match(question, texts, vectors):
q_emb = client.embeddings.create(
model="text-embedding-3-small",
input=question
).data[0].embedding
sims = cosine_similarity([q_emb], vectors)[0]
best_idx = int(np.argmax(sims))
return texts[best_idx]
def ask_ai(question, context):
messages = [
{"role": "system", "content": "你是一位文件助理,根據內容回答問題。"},
{"role": "user", "content": f"文件內容:{context}\n\n問題:{question}"}
]
resp = client.chat.completions.create(model="gpt-4o-mini", messages=messages)
return resp.choices[0].message.content
texts = [
"OpenAI API 提供 Chat, Image, Audio, Embeddings 等功能。",
"Chat 模型可以生成對話與程式碼。",
"Embeddings 可用於語意搜尋與推薦系統。"
]
vectors = get_embeddings(texts)
question = input("請輸入問題:")
context = find_best_match(question, texts, vectors)
answer = ask_ai(question, context)
print("\nAI 回答:", answer)
OpenAI API 的每個功能都很強,但真正厲害的地方,是 把它們整合起來解決問題
今天的智慧文件助理,就是一個縮小版的 ChatGPT 文件問答系統。
明天就是最後一天,我們要總結這 30 天學到的全部內容!